package com.xuyaxu.rabbitmq.work;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.xuyaxu.rabbitmq.common.utils.RabbitmqUtil;

/**
 * work消息模型（生产者）
 * 解决：简单消息模型的单点故障。通过集群（2台），实现高可用，负载均衡
 *
 * @author xyx
 * @date 2021/3/29 15:12
 */
public class WorkSend {

    /**
     * 队列名称
     */
    private static final String QUEUE_NAME = "test_simple_queue";

    public static void main(String[] args) throws Exception {
        // 从整合的工具类中获取rabbitmq的连接
        Connection connection = RabbitmqUtil.getConnection();
        // 从连接中创建通道，使用通道才能完成消息相关的操作
        Channel channel = connection.createChannel();
        // 声明（创建）队列，参数：队列名称  是否声明为持久队列  是否声明为排他队列  是否声明为自动删除队列  队列的其他参数
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // 循环发布任务
        for (int i = 1; i <= 100; i++) {
            // 消息内容
            String message = "task .. " + i;
            // 向指定队列中发送消息，使用默认交换机
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [work] 生产者 '" + message + "'");
            Thread.sleep(i * 2);
        }
        // 关闭通道和连接
        channel.close();
        connection.close();
    }
}
